package com.zxy.leetcode._00000_00099._00070_00079;

import java.util.Deque;
import java.util.LinkedList;

/**
 * https://leetcode-cn.com/problems/simplify-path/
 *
 * 简化路径
 * 以 Unix 风格给出一个文件的绝对路径，你需要简化它。
 * 或者换句话说，将其转换为规范路径。
 *
 * 在 Unix 风格的文件系统中，一个点（.）表示当前目录本身；
 * 此外，两个点 （..） 表示将目录切换到上一级（指向父目录）；
 * 两者都可以是复杂相对路径的组成部分。
 * 更多信息请参阅：Linux / Unix中的绝对路径 vs 相对路径
 *
 * 请注意，返回的规范路径必须始终以斜杠 / 开头，
 * 并且两个目录名之间必须只有一个斜杠 /。
 * 最后一个目录名（如果存在）不能以 / 结尾。
 * 此外，规范路径必须是表示绝对路径的最短字符串。
 *
 * 思路：栈
 */
public class Test00071 {

    public static void main(String[] args) {
        Test00071 test = new Test00071();

        System.out.println(test.simplifyPath("/."));
        System.out.println(test.simplifyPath("/a/../../b/../c//.//"));
    }

    public String simplifyPath(String path) {
        if (path == null || path.length() <= 1) {
            return path;
        }

        String[] strings = path.split("/");
        Deque<String> deque = new LinkedList<>();
        for (String str : strings) {
            if (str.equals("")) {
                continue;
            }
            if (str.equals(".")) {
                continue;
            }
            if (str.equals("..")) {
                if (!deque.isEmpty()) {
                    deque.removeLast();
                }
            }else {
                deque.add(str);
            }
        }
        if (deque.isEmpty()) {
            return "/";
        }

        return "/" + String.join("/", deque);
    }
}
